# -*- coding: utf-8 -*-
import os
import sys
import time

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
log_directory = os.path.join(BASE_DIR, 'logs')
log_file_max_bytes = 10 * 1024 * 1024
log_file_backup_count = 100

log_fmt = '%(asctime)s %(levelname)8s %(threadName)16s %(filename)16s:%(lineno)3s %(funcName)16s %(message)s'

LOG_CONFIIG = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'default': {
            'format': log_fmt,
            'style': '%',
        },
        'access': {
            '()': 'uvicorn.logging.AccessFormatter',
            'fmt': '%(asctime)s %(levelname)8s %(threadName)16s %(funcName)16s %(request_line)s %(status_code)s',
        },
    },

    'handlers': {
        'default': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(log_directory, f'log-{time.strftime("%Y-%m-%d")}.log'),
            'mode': 'a+',
            'maxBytes': log_file_max_bytes,
            'backupCount': log_file_backup_count,
            'encoding': 'utf-8',
            'formatter': 'default',
        },
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(log_directory, f'error-{time.strftime("%Y-%m-%d")}.log'),
            'mode': 'a+',
            'maxBytes': log_file_max_bytes,
            'backupCount': log_file_backup_count,
            'encoding': 'utf-8',
            'formatter': 'default',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'stream': sys.stdout,
            'formatter': 'default',
        },

        'access': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'stream': sys.stdout,
            'formatter': 'access',
        },
    },
    'loggers': {
        'default': {
            'handlers': ['default', ],
            'level': 'INFO',
            'propagate': False,
        },
        'console': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': False,
        },
        'uvicorn': {
            'handlers': ['default', 'console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'uvicorn.error': {
            'handlers': ['error', ],
            'level': 'DEBUG',
            'propagate': True,
        },
        'uvicorn.access': {
            'handlers': ['access'],
            'level': 'DEBUG',
            'propagate': False,
        },

    },
    'root': {
        'handlers': ['default', 'error', 'console', ],
        'level': 'DEBUG',
    },
}
